import { Message, MessageBox } from 'element-ui';

/**
 * 消息提示
 *
 * @param msg 提示的消息内容
 * @param type 消息类型：'success' | 'warning' | 'info' | 'error'
 */
export function messageTip(msg, type) {
    Message({
        showClose: true,
        center: true,
        duration: 3000,
        message: msg,
        type: type,
    });
}

/**
 * 获取存储在 sessionStorage 或者 localStorage 中的 token (jwt) 的名字
 *
 * @returns {string}
 */
export function getTokenName() {
    return "dlyk_token";
}

/**
 * 删除 localStorage 和 sessionStorage 中存储的 token
 */
export function removeToken() {
    window.sessionStorage.removeItem(getTokenName());
    window.localStorage.removeItem(getTokenName());
}

/**
 * 消息确认提示
 *
 * @param msg 提示语
 * @returns {Promise<MessageBoxData>}
 */
export function messageConfirm(msg) {
    return MessageBox.confirm(
        msg, // 提示语
        '系统提醒',
        {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
        }
    );
}

/**
 * 封装返回函数
 *
 * 注意：此方法应该在 Vue 组件的方法中调用，因为需要访问 this.$router。
 */
export function goBack(vm) {
    vm.$router.go(-1);
}

/**
 * 获取 token
 *
 * @returns {string | null} 返回 token 字符串或 null 如果没有找到 token
 */
export function getToken() {
    let token = window.sessionStorage.getItem(getTokenName());
    if (!token) {
        token = window.localStorage.getItem(getTokenName());
    }
    if (token) {
        return token;
    } else {
        messageConfirm("请求 token 为空，是否重新去登录？").then(() => {
            removeToken();
            window.location.href = "/";
        }).catch(() => {
            messageTip("取消去登录", "warning");
        });
        return null;
    }
}